余ってる iPhone を Linux の Web カメラ代わりに使う
iPhone 11 Pro が余ってるので。DroidCam を使う。
感想としては、Pro は必須。たしか 700 円買い切りだったか、毎年 700 円だったか忘れたけどそんなもん。
Linux は残念ながら高画質のカメラを使いたいなら、HDMI Out のあるガチなカメラを video capture するしかないみたいなのを 2022 くらいの Reddit 記事で見た記憶がある(一次ソースにあたってないので真偽不明)。DroidCam Pro は第二の選択肢と言える。
Windows だったらこんな苦労はしないのにとか言ってはいけない。
設定
code:shell
paru -S droidcam
// このパッケージは元々入ってたのでカット
paru -S v4l2loopback-dc-dkms // DroidCam用仮想カメラモジュールをビルド
sudo depmod -a // カーネルモジュールの依存関係解決
sudo modprobe v4l2loopback_dc exclusive_caps=1 // 仮想カメラを作成
接続方式は USB としよう。
Wi-Fi にしたところでどうせ給電しなければならないのでケーブルの本数を減らせるわけでもなく、だったら安心の有線としつつ udev rule も使えるようにしたい。iPhone の完全オフライン化もできて安心感あるし。古くてメンテしない端末がオンラインとか怖い。
適切な位置で撮影するために設置にはスマホアームを使って高さを稼ぐことになるので、ケーブルはアームに添わせたらいい。
まあ Wi-Fi 接続かつ MagSafe のチャージャーをスマホアームと合体させて使えば (最初から合体しているような商品がパっと見た感じなさそう)、チャージャー用のケーブルが 1 本必要とはいえ iPhone 自体は完全にワイヤレスになるのでケーブルはスッキリはするし取り回しも楽だとは思うけどね。だがそこまでしなくてもいいかなと。
取り回しを改善したければ Lightning のマグネット化ガジェットでどうにかなりそうだし。
iPhone 側の設定
DroidCam のインストールは当然する
ロック常時解除およびパスコード不要化
やり方はググるとすぐ出てくる
なので安全のため
不要なアプリは一通り消しておく
SIM は抜いて WiFi も忘れさせておく
常時起動化
カメラカバーつきの iPhone ケースに入れることで物理的な映像遮断を可能に
起動コマンド
DroidCam には CLI がある。
code:shell
droidcam-cli -vflip -hflip ios 4747
自分の設置環境だと vflip が必要。
最後に 4747 とあるのはポート番号で、これは GUI 版がデフォルトで設定するポート番号と同じである。
audio は無効化したままで。勝手に音を拾わせない。
WIP 自動起動
こうかな…?まだ試してない。 -> 試したけど思った通り動いてない。
プロセスが残っているようなら一旦削除する、と。
code:/etc/udev/rules.d/99-iphone-droidcam.rules
SUBSYSTEM=="video4linux", KERNEL=="video0-9*", ATTRS{idVendor}=="05ac", ATTRS{idProduct}=="12a8", RUN+="pkill droidcam-cli; droidcam-cli -vflip -hflip ios 4747" 設定した sudo udevadm control --reload する。
ただしこの設定には穴があって、iPhone 側で DroidCam が起動していないと実行に失敗し、かつ能動的に気づく術もない。
pgrep droidcam-cli の実行成否を Polybar にでも出しておけばいいのかな。
Logitech C920n と比べて良いところ
顔のフォーカスを失わない
フォーカスの判定ミスって急に顔が blur されるんだもんな、あいつ
ただし v4l2-ctl --set-ctrl=focus_automatic_continuous=0 --set-ctrl=focus_absolute=0 とやってフォーカスそのものを無効化することで対策はできるんだよね
急に暗くならない
ブライトネスだかホワイトバランスだかの自動調整が突然ポンコツになる問題が C920n と違い今のところ起きていない
Google Meet の Auto Focus が C920n だと効かなかった…ような気がするが、実際どうだったんだろう
こっちでは効いてくれる
そこまで良いか?
画質(C920 でフォーカスと光の加減がまともな場合と比較して)
顔色が良くは見えるけど、高画質というわけでもない
ただしこれは帯域の問題もあるし一概に高画質だから良いとも言い切れない
あとは部屋の照明も関係してくる
DroidCam を Pro にすると画質を上げるオプションがあった気がするのでそれを試してみてもいいかも
Pro にしたらすんげぇ画質良くなった
つらいところ
USB ケーブルの再接続が必要になったりする
Linux 側で Error getting a connection: Make sure DroidCam app is open. Try re-attaching device. が出る。iPhone の DroidCam を落として再起動とかやってみたがダメで、USB ケーブルを外して挿し直したら解消した
おそらくこれは hibernate から復帰した時に発生する
こういうときは droidcam-cli を Ctrl-C で終了できず、p?kill で落とすことになる
もしかしたら hibernate するときに droidcam-cli は kill するようにしたらいいのか?
-> 関係ないっぽい
iPhone 側の画面操作が必要
Zoom の調整はピンチでやる必要がある
そして Zoom を記録しておいてくれないので、上記のように再接続したら設定し直しになる
Pro は Zoom in/out 機能があるとか何とか言ってるので、そっちでマシになったりしない?
-> Pro にしたら "Remember parameters (zoom とか exposure とか)" っていうのが使えた
そうでなくとも、何かの都合でアプリを落としてしまったりした場合、画面操作のやり直しが発生する
Android だったら scrcpy で PC 側から端末操作すれば解消するんだけどなー
古い Pixel でも買えばいいんだろうか。純粋なカメラとして見てしまうと高額ではあるので、Anbox 代わりにも使うならアリではないか
どうするか
USB ケーブル物理再接続問題
まずは「droidcam-cli を起動したまま hibernate すると発生する」ということを確定させる
これで確定であれば hibernate 時にプロセスを落とし、復帰時に再び起動するのをチョロチョロっと噛ましてやればいい
もしそれでも解消しないのであれば、オンオフスイッチ付きの USB ケーブルを途中に噛ませることで対処
Zoom 問題
NEW: Pro にしたら Zoom の記憶しておいてくれそう
Pro でなくとも Google Meet の場合
Seetings -> Video にて Framing を有効化すれば解消!
他
Google Meet と同じ機能がればいいけど、ない場合
Pro を買ってみて、楽になればいいんだけど
ちなみに v4l2-ctl で Linux 側から変更することは不可能
v4l2-ctl --all してみたところ、zoom 系のパラメータがないんだなー
Android を使うとしよう
Anbox 代わりに使うという前提ならネットワークには接続したいよね
オフラインにして使うとかいう涙ぐましいささやかな抵抗プライバシー意識を放棄することにはなる
Pro にすれば USB 接続 Only モードみたいなやつがあるから、端末そのものに悪意ある何かが入っていなければ大丈夫ではある
あとは費用対効果だ
というか、もともとは余ってる iPhone を性能の良いカメラとして再利用することのコスパの良さみたいなのを求めていたわけなので、なんかもう本末転倒という気はする
楽しければいいんだよ!
問題発生
iPhone 側で DroidCam 再起動しても、USB ケーブル再接続しても、Linux 側で droidcam-cli および OS 再起動しても device が見つからない的なエラーが……。
iPhone 再起動したら直ったよ!
これさ、iPhone 側でこんなに操作が必要となると、iPhone の操作に手間取るようじゃダメだと思うんだ。
1. 今のスマホアームは取り外しが面倒
無駄に力がいる
これはアームの変更でどうにかなると思う
2.